/**
 * 配置
 * */
package org.zmhhxl.user.database;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

@Configuration //(proxyBeanMethods = false)
public class DataSourceConfig {

//    @Autowired
//    private Environment env;

/*
    * 另一种注入方式，自定义注入方式
    * @PropertySource(value = "classpath:qinjiang.properties")
    * 在对应的类字段名上加@Value("${qinjiang.name}")
    *
    * @Bean
    @Primary
    @ConfigurationProperties("spring.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    *//*另外有HikariDataSource, DruidDataSource*//*
    @Bean
    @ConfigurationProperties("spring.datasource.configuration")
    public DataSource dataSource(DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().type(DataSource.class).build();
    }*/

/*
    配合yml，可配置2个数据库

    @Bean
    @Primary
    @ConfigurationProperties("app.datasource.first")
    public DataSourceProperties firstDataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @Primary
    @ConfigurationProperties("app.datasource.first.configuration")
    public HikariDataSource firstDataSource(DataSourceProperties firstDataSourceProperties) {
        return firstDataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
    }

    @Bean
    @ConfigurationProperties("app.datasource.second")
    public DataSourceProperties secondDataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @ConfigurationProperties("app.datasource.second.configuration")
    public BasicDataSource secondDataSource(
            @Qualifier("secondDataSourceProperties") DataSourceProperties secondDataSourceProperties) {
        return secondDataSourceProperties.initializeDataSourceBuilder().type(BasicDataSource.class).build();
    }*/

    /**
     * 使用不同前缀来配置多数据源,prefix="spring.datasource"前缀
     * 通过Spring JDBC 快速创建 DataSource,
     * 参数格式
     * spring.datasource(.master).type=...
     * spring.datasource(.master).url=jdbc:mysql://localhost:3306/charles_blog
     * spring.datasource(.master).username=root
     * spring.datasource(.master).password=root
     * spring.datasource(.master).driver-class-name=com.mysql.jdbc.Driver
     *
     * @return DataSource
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        /*DruidDataSource ds = new DruidDataSource();
          ds.setDbType("");
          ds.setDriverClassName("");
          ds.setUrl("");
          ds.setUsername("root");
          ds.setPassword("root");*/

        //另见  DataSourceBuilder  DruidDataSourceBuilder   new DruidDataSourceWrapper()

        DruidDataSource ds = DruidDataSourceBuilder.create().build();
        return ds;
    }

//    @Bean
//    public JdbcTemplate jdbcTemplate(@Autowired DataSource dataSource) {
//        // 使用JdbcTemplate
//        return new JdbcTemplate(dataSource);
//    }
@Bean
public JdbcTemplate jdbcTemplate(){
    // 使用JdbcTemplate
        return new JdbcTemplate( dataSource(/*dataSourceProperties()*/) );
}


    /**
     * 使用不同前缀来配置多数据源,prefix="spring.datasource"前缀
     * 通过Spring JDBC 快速创建 DataSource,
     * 参数格式
     * spring.datasource(.master).type=...
     * spring.datasource(.master).url=jdbc:mysql://localhost:3306/charles_blog
     * spring.datasource(.master).username=root
     * spring.datasource(.master).password=root
     *
     * @return DataSource
     */
//    @Bean
//    @Primary
//    public DataSource dataSource() {
//        Properties properties = new Properties();
//        // 从环境变量中加载配置，避免硬编码
//        StringUtils.splitArrayElementsIntoProperties(env.getProperty("spring.datasource"), ",", true, properties);
//
//        // 使用DruidDataSource作为例子
//        DruidDataSource ds = DruidDataSourceBuilder.create()
//              .driverClassName(properties.getProperty("driver-class-name"))
//              .url(properties.getProperty("url"))
//              .username(properties.getProperty("username"))
//              .password(properties.getProperty("password"))
//              .build();
//
//        // 可以添加更多的配置基于properties
//
//        // 添加异常处理逻辑（示例）
//        try {
//            ds.validate();
//        } catch (Exception e) {
//            // 记录日志并处理异常
//            // log.error("数据源配置验证失败", e);
//            throw new RuntimeException("数据源配置错误", e);
//        }
//
//        return ds;
//    }



}
